home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / no404.nasl < prev    next >
Text File  |  2005-01-14  |  8KB  |  240 lines

  1.  
  2. #
  3. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  4. # - rewritten in parts by H D Moore <hdmoore@digitaldefense.net>
  5. #
  6. # See the Nessus Scripts License for details
  7. #
  8.  
  9. if(description)
  10. {
  11.  script_id(10386);
  12.  script_version ("$Revision: 1.60 $");
  13.  
  14.  name["english"] = "No 404 check";
  15.  name["francais"] = "No 404 check";
  16.  script_name(english:name["english"], francais:name["francais"]);
  17.  
  18.  desc["english"] = "
  19. This web server is [mis]configured in that it
  20. does not return '404 Not Found' error codes when
  21. a non-existent file is requested, perhaps returning
  22. a site map, search page or authentication page instead.
  23.  
  24. Nessus enabled some counter measures for that, however
  25. they might be insufficient. If a great number of security
  26. holes are produced for this port, they might not all be accurate";
  27.  
  28.  
  29.  
  30.  script_description(english:desc["english"]);
  31.  
  32.  summary["english"] = "Checks if the remote webserver issues 404 errors";
  33.  summary["francais"] = "VΘrifie que le serveur web distant sort des erreurs 404";
  34.  
  35.  script_summary(english:summary["english"], francais:summary["francais"]);
  36.  
  37.  script_category(ACT_GATHER_INFO);
  38.  
  39.  
  40.  script_copyright(english:"This script is Copyright (C) 2000 Renaud Deraison",
  41.         francais:"Ce script est Copyright (C) 2000 Renaud Deraison");
  42.  family["english"] = "CGI abuses";
  43.  family["francais"] = "Abus de CGI";
  44.  script_family(english:family["english"], francais:family["francais"]);
  45.  script_dependencie("find_service.nes", "httpver.nasl", "http_login.nasl", "webmirror.nasl");
  46.  script_require_ports("Services/www", 80);
  47.  exit(0);
  48. }
  49.  
  50. #
  51. # The script code starts here
  52. #
  53.  
  54. include("http_func.inc");
  55. include("global_settings.inc");
  56. include("http_keepalive.inc");
  57.  
  58. function check(url, port)
  59. {
  60.     req = http_get(item:url, port:port);
  61.     result = http_keepalive_send_recv(data:req, port:port);
  62.     if(result == NULL)exit(0);
  63.     return(result);
  64. }
  65.  
  66. function find_err_msg(buffer)
  67. {
  68.     for (cmsg = 0; errmsg[cmsg]; cmsg = cmsg + 1)
  69.     {
  70.         cpat = errmsg[cmsg];
  71.         if (egrep(pattern:cpat, string:buffer, icase:TRUE))
  72.         {
  73.             if (debug_level) display("no404 - '",cpat, "' found in '", buffer, "'\n");
  74.             return(cpat);
  75.         }
  76.     }
  77.  
  78.     return (0);
  79. }
  80.  
  81. # build list of test urls
  82.  
  83. basename="404";
  84. while ("404" >< basename) basename=string("/NessusTest", rand());
  85.  
  86. i = 0;
  87. badurl[i++] = string(basename, ".html");
  88. badurl[i++] = string(basename, ".cgi");
  89. badurl[i++] = string(basename, ".sh");
  90. badurl[i++] = string(basename, ".pl");
  91. badurl[i++] = string(basename, ".inc");
  92. badurl[i++] = string(basename, ".shtml");
  93. badurl[i++] = string(basename, ".asp");
  94. badurl[i++] = string(basename, ".php");
  95. badurl[i++] = string(basename, ".php3");
  96. badurl[i++] = string(basename, ".cfm");
  97.  
  98. badurl[i++] = string("/cgi-bin", basename, ".html");
  99. badurl[i++] = string("/cgi-bin", basename, ".cgi");
  100. badurl[i++] = string("/cgi-bin", basename, ".sh");
  101. badurl[i++] = string("/cgi-bin", basename, ".pl");
  102. badurl[i++] = string("/cgi-bin", basename, ".inc");
  103. badurl[i++] = string("/cgi-bin", basename, ".shtml");
  104. badurl[i++] = string("/cgi-bin", basename, ".php");
  105. badurl[i++] = string("/cgi-bin", basename, ".php3");
  106. badurl[i++] = string("/cgi-bin", basename, ".cfm");
  107.  
  108. i = 0;
  109. errmsg[i++] = "not found";
  110. errmsg[i++] = "404";
  111. errmsg[i++] = "error has occurred";
  112. errmsg[i++] = "FireWall-1 message";
  113. errmsg[i++] = "Reload acp_userinfo database";
  114. errmsg[i++] = "IMail Server Web Messaging";
  115. errmsg[i++] = "HP Web JetAdmin";
  116. errmsg[i++] = "Error processing SSI file";
  117. errmsg[i++] = "ExtendNet DX Configuration";
  118. errmsg[i++] = "Unable to complete your request due to added security features";
  119. errmsg[i++] = "Client Authentication Remote Service</font>";
  120. errmsg[i++] = "Bad Request";
  121. errmsg[i++] = "<form action=/session_login.cgi";    # webmin
  122. errmsg[i++] = "Webmin server";
  123. errmsg[i++] = "Management Console";    
  124. errmsg[i++] = "TYPE=password";    # As in "<input type=password>"
  125. errmsg[i++] = "The userid or password that was specified is not valid.";  # Tivoli server administrator   
  126. errmsg[i++] = "Access Failed";
  127. errmsg[i++] = "Please identify yourself:";
  128. errmsg[i++] = "forcelogon.htm";
  129. errmsg[i++] = "encountered an error while publishing this resource";
  130. errmsg[i++] = "No web site is configured at this address";
  131. errmsg[i++] = 'name=qt id="search" size=40 value=" "';
  132. errmsg[i++] = "PHP Fatal error:  Unable to open";
  133. errmsg[i++] = "RSA SecurID User Name Request";
  134. errmsg[i++] = "Error Occurred While Processing Request";
  135. errmsg[i++] = "Web access denied";
  136. errmsg[i++] = "Error Page";
  137. errmsg[i++] = "The page you requested doesn't exist";
  138. errmsg[i++] = "TYPE='password'";
  139. errmsg[i++] = 'TYPE="password"';
  140.  
  141. port = get_http_port(default:80);
  142.  
  143. if(!get_port_state(port))exit(0);
  144.  
  145. found = string("www/no404/", port);
  146.  
  147. for (c = 0; badurl[c]; c = c + 1)
  148. {
  149.     url = badurl[c];
  150.     
  151.     if(debug_level) display("no404 - Checking URL ", url, " on port ", port, "\n");
  152.     ret = check(url:url, port:port);
  153.   
  154.     if (!(ret == 0))
  155.     {
  156.  
  157.         raw_http_line = egrep(pattern:"^HTTP/", string:ret);
  158.         # check for a 200 OK
  159.         if(ereg(pattern:"^HTTP/[0-9]\.[0-9] 200 ", string:raw_http_line))
  160.         {
  161.              # look for common "not found": indications
  162.              not_found = find_err_msg(buffer:ret);
  163.              if (not_found != 0)
  164.              {
  165.                 
  166.                 set_kb_item(name:found, value:string(not_found));
  167.                 security_note(port);
  168.                 
  169.                 if(debug_level) display("no404 - 200: Using string: ", not_found, "\n");
  170.                 exit(0);              
  171.              } else {
  172.                 
  173.                 # try to match the title
  174.                 title = egrep(pattern:"<title", string:ret, icase:TRUE);
  175.                 if (title)
  176.                 {
  177.                     title = ereg_replace(string:title, pattern:".*<title>(.*)</title>.*", replace:"\1", icase:TRUE);
  178.                     if (title)
  179.                     {
  180.                         if(debug_level) display("no404 - using string from title tag: ", title, "\n");
  181.                         set_kb_item(name:found, value:title);
  182.                         security_note(port);
  183.                         exit(0);
  184.                     }
  185.                 }
  186.                 
  187.                 # try to match the body tag
  188.                 body = egrep(pattern:"<body", string:ret, icase:TRUE);
  189.                 if (body)
  190.                 {
  191.                     body = ereg_replace(string:body, pattern:"<body(.*)>", replace:"\1", icase:TRUE);
  192.                     if (body)
  193.                     {
  194.                         if(debug_level) display("no404 - using string from body tag: ", body, "\n");
  195.                         set_kb_item(name:found, value:body);
  196.                         security_note(port);
  197.                         exit(0);
  198.                     }
  199.                 }
  200.                 
  201.                 # get mad and give up
  202.                 if(debug_level)display("no404 - argh! could not find something to match against.\n");
  203.                 if(debug_level)display("no404 - [response]", ret, "\n");
  204.         msg = "
  205. This web server is [mis]configured in that it
  206. does not return '404 Not Found' error codes when
  207. a non-existent file is requested, perhaps returning
  208. a site map, search page or authentication page instead.
  209.  
  210. Unfortunately, we were unable to find a way to recognize this page,
  211. so some CGI-related checks have been disabled.
  212.  
  213. To work around this issue, please contact the Nessus team.";
  214.         security_note(port: port, data: msg);
  215.         set_kb_item(name:found, value:"HTTP");
  216.                 exit(0);
  217.                 
  218.              }
  219.         }
  220.         
  221.         # check for a 302 Moved Temporarily or 301 Move Permanently
  222.         if(ereg(pattern:"^HTTP/[0-9]\.[0-9] 30[12] ", string:raw_http_line))
  223.         {
  224.              # put the location field as no404 msg
  225.          loc = egrep(string: ret, pattern: "^Location:");
  226.              set_kb_item(name:found, value:loc);
  227.              
  228.              security_note(port);
  229.              if(debug_level) display("no404 - 302: Using ", raw_http_line, "\n");
  230.              exit(0);                 
  231.         }
  232.         
  233.     } else {
  234.         if(debug_level) display("no404 - An error occurred when trying to request: ", url, "\n");
  235.     }
  236. }
  237.  
  238.  
  239.  
  240.